import { roleApi } from "@/api/authority";
import { IObject } from "@/types/interface";

// 角色数据接口 - 根据API文档修正
interface RoleData {
  id: string;                     // 根据API文档，id是string类型
  roleName: string;               // 角色名称 - API文档中是roleName
  organizationType: number;       // 组织类型 - API文档中是integer
  authorityType: string;          // 权限类型 - "0":Web,"1":"App","0,1":Web和App
  status: number;                 // 状态 - API文档中是integer (1:可用,0:不可用)
  createTime: string;             // 创建时间 - API文档中是createTime
  modifyTime: string;             // 修改时间 - API文档中是modifyTime
  modifyUser: string;             // 修改用户 - API文档中是modifyUser
}

// 查询参数接口 - 根据API文档修正
interface QueryParams {
  page?: number;                  // 页码
  limit?: number;                 // 每页显示记录数 - API文档中是limit，不是pageSize
  roleName?: string;              // 角色名称 - API文档中是roleName
  organizationType?: number;      // 组织类型
  authorityType?: string;         // 权限类型
}

// 新增角色参数接口 - 根据API文档修正
interface CreateRoleData {
  name: string;               // 角色名称 - API文档中是roleName
  organizationType: number;       // 单选0:分销商,1:安装商
  authorityType: string;          // 0:Web,1:App, 0,1:Web和App(多选用逗号隔开)
  note: string;                   // 备注
  menuIdList: (string | number)[]; // 菜单权限列表 - 统一支持string和number
  status: number;                 // 状态 (1:启用, 0:禁用) - 创建时默认为启用
}

// 修改角色参数接口 - 根据API文档修正
interface UpdateRoleData {
  id: string;                     // 角色id - 修改时是string
  name: string;               // 角色名称 - API文档中是roleName
  organizationType: number;       // 组织类型
  authorityType: string;          // 权限类型
  note: string;                   // 备注
  menuIdList: (string | number)[]; // 菜单权限列表 - 统一支持string和number
  status?: number;                 // 当前角色状态（可选，前端用于防止状态被覆盖）
}

// 修改角色状态参数接口 - 根据API文档修正
interface UpdateRoleStatusData {
  id: string;                     // 角色id - 根据API文档，id是string类型
  status: number;                 // 状态 (1:可用, 0:不可用)
}

// 获取角色列表 - 调用真实API
export const getRoleList = async (params: QueryParams) => {
  try {
    // 使用角色分页查询接口
    const response = await roleApi.getPage(params);
    if (response.code === 0) {
      return {
        list: response.data.list || [],
        totalCount: response.data.total || 0
      };
    } else {
      console.error('获取角色列表失败:', response.msg);
      return { list: [], totalCount: 0 };
    }
  } catch (error) {
    console.error('获取角色列表错误:', error);
    return { list: [], totalCount: 0 };
  }
};

// 添加角色 - 调用真实API
export const addRole = async (roleData: CreateRoleData) => {
  try {
    console.log('开始添加角色:', roleData);
    
    // 确保数据格式正确
    const cleanData = {
      name: String(roleData.name || ''),
      organizationType: Number(roleData.organizationType || 0),
      authorityType: String(roleData.authorityType || ''),
      note: String(roleData.note || ''),
      menuIdList: Array.isArray(roleData.menuIdList) 
        ? roleData.menuIdList.map(x => String(x))
        : [],
      status: Number(roleData.status || 1)
    };
    
    console.log('清理后的角色数据:', cleanData);
    
    // 使用新增角色接口
    const response = await roleApi.create(cleanData);
    
    console.log('角色添加响应:', response);
    
    if (response.code === 0) {
      return { success: true, data: response.data, message: '角色添加成功' };
    } else {
      console.error('角色添加失败:', response.msg);
      return { success: false, message: response.msg || '角色添加失败' };
    }
  } catch (error) {
    console.error('添加角色错误:', error);
    return { success: false, message: '角色添加失败' };
  }
};

// 更新角色 - 调用真实API
export const updateRole = async (roleData: UpdateRoleData) => {
  try {
    console.log('开始更新角色:', roleData);
    
    // 确保数据格式正确
    const cleanData = {
      id: String(roleData.id),
      name: String(roleData.name || ''),
      organizationType: Number(roleData.organizationType || 0),
      authorityType: String(roleData.authorityType || ''),
      note: String(roleData.note || ''),
      menuIdList: Array.isArray(roleData.menuIdList) 
        ? roleData.menuIdList.map(x => String(x))
        : [],
      status: Number(roleData.status || 1)
    };
    
    console.log('清理后的角色数据:', cleanData);
    
    // 使用修改角色接口
    const response = await roleApi.update(cleanData);
    
    console.log('角色更新响应:', response);
    
    if (response.code === 0) {
      return { success: true, data: response.data, message: '角色更新成功' };
    } else {
      console.error('角色更新失败:', response.msg);
      return { success: false, message: response.msg || '角色更新失败' };
    }
  } catch (error) {
    console.error('更新角色错误:', error);
    return { success: false, message: '角色更新失败' };
  }
};

// 切换角色状态 - 调用真实API
export const toggleRoleStatus = async (roleId: string, status: number) => {
  try {
    console.log('开始切换角色状态:', { roleId, status, roleIdType: typeof roleId });
    
    // 确保ID是字符串类型
    const stringId = String(roleId);
    
    // 使用修改角色状态接口
    const response = await roleApi.updateStatus({ 
      id: stringId, 
      status: status
    });
    
    console.log('角色状态切换响应:', response);
    
    if (response.code === 0) {
      return { 
        success: true, 
        message: status === 1 ? '角色启用成功' : '角色禁用成功' 
      };
    } else {
      console.error('角色状态切换失败:', response.msg);
      return { success: false, message: response.msg || '状态更新失败' };
    }
  } catch (error) {
    console.error('切换角色状态错误:', error);
    return { success: false, message: '状态更新失败' };
  }
};

// 删除角色 - 调用真实API
export const deleteRole = async (roleIds: string[]) => {
  try {
    // 使用删除角色接口 - 根据API文档，删除接口接收数组
    const response = await roleApi.delete(roleIds);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '角色删除成功' };
    } else {
      return { success: false, message: response.msg || '角色删除失败' };
    }
  } catch (error) {
    console.error('删除角色错误:', error);
    return { success: false, message: '角色删除失败' };
  }
};

// 获取角色详情 - 调用真实API
export const getRoleById = async (roleId: string | number) => {
  try {
    // 使用角色id查询接口
    const response = await roleApi.getById(String(roleId));
    if (response.code === 0) {
      return { success: true, data: response.data };
    } else {
      return { success: false, message: response.msg || '获取角色详情失败' };
    }
  } catch (error) {
    console.error('获取角色详情错误:', error);
    return { success: false, message: '获取角色详情失败' };
  }
};

// 获取角色选项列表 - 调用真实API
export const getRoleOptions = async () => {
  try {
    // 使用角色列表接口
    const response = await roleApi.getList();
    if (response.code === 0) {
      return { success: true, data: response.data || [] };
    } else {
      return { success: false, message: response.msg || '获取角色选项失败' };
    }
  } catch (error) {
    console.error('获取角色选项错误:', error);
    return { success: false, message: '获取角色选项失败' };
  }
};